/**
 * 
 */
package org.statewalker.parser.wiki.tokenizer;

import org.statewalker.parser.wiki.grammar.WikiInlineGrammar;
import org.statewalker.parser.wiki.tokenizer.base.StreamToken;
import org.statewalker.parser.wiki.tokenizer.base.TextBaseGrammar;
import org.statewalker.parser.wiki.tokenizer.inline.EscapedTokenizer;
import org.statewalker.parser.wiki.tokenizer.inline.FormatTokenizer;
import org.statewalker.parser.wiki.tokenizer.inline.LinkTokenizer;
import org.statewalker.tokenizer.base.NewLineTokenizer;
import org.statewalker.tokenizer.base.SpaceTokenizer;
import org.statewalker.tokenizer.base.SpecialSymbolTokenizer;
import org.statewalker.tokenizer.base.WordTokenizer;

/**
 * @author kotelnikov
 */
public class InlineTokenizer extends CompositeStreamTokenizer {

    private NewLineTokenizer<StreamToken> fNewLineTokenizer;

    /**
     * 
     */
    public InlineTokenizer(
        TextBaseGrammar baseGrammar,
        WikiInlineGrammar wikiGrammar) {
        fNewLineTokenizer = new NewLineTokenizer<StreamToken>(
            getFactory(baseGrammar.S_EOL));
        addTokenizer(new SpaceTokenizer<StreamToken>(
            getFactory(baseGrammar.S_SPACE)));
        addTokenizer(new WordTokenizer<StreamToken>(
            getFactory(baseGrammar.S_WORD)));
        addTokenizer(fNewLineTokenizer);
        addTokenizer(new LinkTokenizer(getFactory(wikiGrammar.S_A)));
        addTokenizer(new EscapedTokenizer(getFactory(wikiGrammar.S_ESC)));
        addTokenizer(new FormatTokenizer(getFactory(wikiGrammar.S_STYLE)));
        addTokenizer(new SpecialSymbolTokenizer<StreamToken>(
            getFactory(baseGrammar.S_SYMBOLS)));
    }

    public NewLineTokenizer<StreamToken> getNewLineTokenizer() {
        return fNewLineTokenizer;
    }
}
